создан в 1997 году. откорректирован 24.06.2002, 24.01.2003.
Максимальная длина строковых типов зависит от используемого набора символов. Наборы символов перечислены в Data Defintion Guide (Appendix A) и в Language Reference (Appendix D). Для каждого набора указано, сколько байт занимает один символ. Если один символ набора занимает больше одного байта, то максимальна длина строкового поля будет 32767/кол-во_байт_на_символ (т.е. для UNICODE_FSS - 10922 символа).
На диске эти типы хранятся следующим образом:
Таким образом, количество концевых пробелов хранит только varchar. Значение char "добивается" пробелами до объявленной длины только тогда, когда с ним производятся операции присвоения или передача данных на сторону клиента.
Поэтому, с точки зрения эффективности хранения различия между char и varchar практически нет (на диске с одинаковыми данными varchar больше char на 2 байта). И для работы нужно выбирать то, что удобнее. Как правило это varchar.
Клиентские компоненты могут (или не могут) осуществлять обрезание концевых
пробелов для столбцов CHAR. В зависимости от склонностей разработчика такого
набора обрезание пробелов может быть по умолчанию, а может и потребовать
установки в True какого-либо свойства или на уровне DataSet, или на уровне
конкретного поля (TStringField). Поэтому, если вас замучили концевые пробелы в
строках, посмотрите на свойства компонент.
Нужно отметить, что ни BDE ни
dbExpress не могут выполнять обрезание концевых пробелов у строк.
Сегменты BLOB всегда записываются на свободное пространство, и занимают
только действительный объем данных BLOB.
Если размер BLOB превышает размер
страницы, то создается массив указателей на страницы BLOB. При очень больших
размерах BLOB могут появиться указатели на страницы указателей BLOB.
При
изменении записи, если содержимое blob не менялось, его blobID остается тем же
самым. Собственно, в новой версии записи пишутся только те поля, которые были
изменены. Следовательно, при модификации записи, если не затронуто поле BLOB,
данные blob не "дублируются". Если же блоб меняется, то как и версия записи, он
находится на диске в двух экземплярах - старом и новом. Учитывайте это для
блобов, хранящих большой объем данных.
примечание: Индексировать по полям BLOB невозможно.
В Firebird и Yaffil, в 3-м диалекте появилась возможность при insert (update?) содержимое блоба задавать обычной строкой. В остальных серверах при подобных действиях будет выдано стандартное сообщение о невозможности конвертации данных.
Вместе с тем уже давно существуют UDF перевода блоба в строку и обратно (FreeUDFLib и другие).